package com.jinan.algorithm.greedy;

public class Dota2Senate {
    public static void main(String[] args) {
        System.out.println(predictPartyVictory("RDRDRDD"));
    }

    /*
    Dota2参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。
    在每一轮中，每一位参议员都可以行使两项权利中的一项:
    禁止一名参议员的权利:参议员可以让另一位参议员在这· 轮和随后的几轮中丧失所有的权利。
    宣布胜利:如果参议员发现有权利投票的参议员都是同一个阵营的，他可以宣布胜利并决定在游戏中的有关变化。
     */
    public static String predictPartyVictory(String senate) {
        char[] senateArray = senate.toCharArray();
        int Rcout = 0;
        int Dcout = 0;
        int curBanR = 0;
        int curBanD = 0;
        int totalBanR = 0;
        int totalBanD = 0;
        boolean first = true;
        while (true) {
            for (int i = 0; i < senateArray.length; i++) {
                if (senateArray[i] == 'R') {
                    if (first) {
                        Rcout++;
                    }
                    if (curBanR == 0) {
                        curBanD++;
                        totalBanD++;
                        if (totalBanD == Dcout && !first) {
                            return "R";
                        }
                    } else {
                        curBanR--;
                        senateArray[i] = 'r';
                    }
                }
                if (senateArray[i] == 'D') {
                    if (first) {
                        Dcout++;
                    }
                    if (curBanD == 0) {
                        curBanR++;
                        totalBanR++;
                        if (totalBanR == Rcout && !first) {
                            return "D";
                        }
                    } else {
                        curBanD--;
                        senateArray[i] = 'd';
                    }
                }
            }
            first = false;
            if (totalBanR >= Rcout) {
                return "D";
            }
            if (totalBanD >= Dcout) {
                return "R";
            }
        }
    }
}
